The current trend for deploying software applications is to architect Web Applications using a distributed microservices model. The microservice architecture, or simply micro services, is a particular method of developing software systems that has grown in popularity in recent years. Many developers have adopted this approach as a preferred way of creating enterprise applications. Thanks to its scalability, this architectural method is considered particularly ideal when developers have to enable support for a range of platforms and devices—spanning web, mobile, the Internet of Things, and wearables. If the developer is not sure of the types of devices for which support will be needed, then this model is also preferable.
While there is no standard, formal definition of microservices, there are certain characteristics that help us identify the style. Essentially, microservice architecture is a method of developing software applications as a suite of independently deployable, small, modular services in which each service runs a unique process and communicates through a well-defined, lightweight mechanism to serve a business goal.
When compared to a monolithic style, which is essentially the opposite of the distributed microservices model, the microservices model gives a clear path for an application to scale, and is easy to manage and develop as a set of independent services. Each service is managed independently and can be deployed on a number of Nodes (virtual machines or containers) and the data location is also dispersed. Large scale web applications have adopted this model. In the micro service design model, a typical client request will land in an ‘API Gateway Node’. The API Gateway Node further requests data from 10-100 of the micro services to generate a rendered Dynamic Web-Page. The services interact with each other or the API Gateway Node either using REST-API or a Message-based AMQP such as the RabbitMQ/ZeroMQ protocols.
The distributed nature of this model makes it difficult for the users/administrators to get centralized visibility into resource usage of each micro service and its behavior. For example, data such as the Service Request Response time, Request Rate, CPU/Mem Utility, etc., are difficult to view. Having visibility into each of these factors helps in resource planning for each service, and determining which services are better to be co-located in the enterprise and which can be hosted on a public cloud.